package com.wlj.web.config;



import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.wlj.web.filter.TimeFilter;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {


    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
        configurer.registerCallableInterceptors(); //拦截异步请求需要单独注册拦截器
        configurer.registerDeferredResultInterceptors(); //拦截异步请求需要单独注册拦截器


        //configurer.setDefaultTimeout();  设置异步请求默认的超时时间，由于开了其他线程来处理业务逻辑，若那些线程阻塞等没有响应，则在超过该时间后释放该请求


        //configurer.setTaskExecutor(); 使用callable时，spring使用了个简单的异步线程池处理的，不会重用线程，而是每次调用时开个新线程，则我们可以
        //设置个自定义的可重用的线程池来替代它默认的不可重用线程池
    }

    //FilterRegistrationBean是要注册的bean的类型:过滤器类型
    @Bean
    public FilterRegistrationBean timeFilter(){

        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        TimeFilter timeFilter = new TimeFilter();
        registrationBean.setFilter(timeFilter);
        //以上代码的效果和加上@component的效果一样

        //以下代码可以指定过滤器生效的url
        List<String> urls = new ArrayList<>();
        urls.add("/*");
        registrationBean.setUrlPatterns(urls);

        return registrationBean;
    }
}
